#ifndef ENCODERCODEC_H
#define ENCODERCODEC_H

#include <QObject>
#include <QMetaType>
#include <QHash>
#include <QVariant>
#include <QList>

class EncoderOption;

class SettingWidgetInterface;

class EncoderCodec: public QObject
{
public:
    EncoderCodec(QObject *parent = 0);
    EncoderCodec(const EncoderCodec &);
    ~EncoderCodec();

    typedef enum {
	PART_COMMON,
	PART_ADVANCE
    } SettingWidgetPart;

    typedef enum {
	PASS_1,
	PASS_2,
	PASS_3,
	PASS_4,
	PASS_UNKNOWN,
    } PassNo;

    virtual QString generateCodecOptionString (PassNo &,const EncoderOption &);

    virtual const QString introduction() const { return tr("Unknown");  }
    virtual const QString name () const { return tr("Unknown"); }
    virtual const QString comment() const { return tr("Unknown"); }
    virtual bool isRecommended() const { return false; }
    virtual bool isUsuallyUsed() const { return false; }

    virtual SettingWidgetInterface * settingWidget(SettingWidgetPart, EncoderOption &) { return NULL; }
};

typedef QList<EncoderCodec> EncodedrCodecList;

Q_DECLARE_METATYPE(EncoderCodec)
Q_DECLARE_METATYPE(EncoderCodec *)

#endif // ENCODERCODEC_H
